/**
 * @copyright chuzhixin 1204505056@qq.com
 * @description 登录、获取用户信息、退出登录、清除accessToken逻辑，不建议修改
 */

import Vue from "vue";
import {getUserInfo, login, logout} from "@/api/user";
import {
    getAccessToken,
    removeAccessToken,
    setAccessToken,
} from "@/utils/accessToken";
import {resetRouter} from "@/router";
import {title, tokenName} from "@/config/settings";

const state = {
    accessToken: getAccessToken(),
    username: "",
    avatar: "",
    permissions: [],
};
const getters = {
    accessToken: (state) => state.accessToken,
    username: (state) => state.username,
    avatar: (state) => state.avatar,
    permissions: (state) => state.permissions,
};
const mutations = {
    setAccessToken(state, accessToken) {
        state.accessToken = accessToken;
        setAccessToken(accessToken);
    },
    setUsername(state, username) {
        state.username = username;
    },
    setAvatar(state, avatar) {
        state.avatar = avatar;
    },
    setPermissions(state, permissions) {
        state.permissions = permissions;
    },
};
const actions = {
    setPermissions({commit}, permissions) {
        commit("setPermissions", permissions);
    },
    async login({commit}, userInfo) {
        const {data} = await login(userInfo);
        const accessToken = data[tokenName];
        if (accessToken) {
            commit("setAccessToken", accessToken);
            const hour = new Date().getHours();
            const thisTime =
                hour < 8
                    ? "早上好"
                    : hour <= 11
                    ? "上午好"
                    : hour <= 13
                        ? "中午好"
                        : hour < 18
                            ? "下午好"
                            : "晚上好";
            Vue.prototype.$baseNotify(`欢迎登录${title}`, `${thisTime}！`);
        } else {
            Vue.prototype.$baseMessage(
                `登录接口异常，未正确返回${tokenName}...`,
                "error"
            );
        }
    },
    async getUserInfo({commit, state}) {
        // const {data} = await getUserInfo(state.accessToken);
        //用户信息
        let data = {
            permissions:[0],//权限配置
            username:'管理员',//用户名称
            avatar:'https://cdn2.jianshu.io/assets/default_avatar/14-0651acff782e7a18653d7530d6b27661.jpg'
        }
        // 用户信息
        if (!data) {
            Vue.prototype.$baseMessage("验证失败，请重新登录...", "error");
            return false;
        }
        let {permissions, username, avatar} = data;
        if (permissions && username && Array.isArray(permissions)) {
            commit("setPermissions", permissions);
            commit("setUsername", username);
            commit("setAvatar", avatar);
            return permissions;
        } else {
            Vue.prototype.$baseMessage("用户信息接口异常", "error");
            return false;
        }
    },
    async logout({dispatch}) {
        // await logout(state.accessToken);
        await dispatch("resetAccessToken");
        await resetRouter();
    },
    resetAccessToken({commit}) {
        commit("setPermissions", []);
        commit("setAccessToken", "");
        removeAccessToken();
    },
};
export default {state, getters, mutations, actions};
